package game.plateau.cartes;

import game.support.Emplacement;

public class CarteImpl implements Carte {
    private Carte carteSuivante;

    private Emplacement premierEmplacement;
    private Emplacement dernierEmplacement;

    public void ajouteALaSuite(Carte carte) {
//        try {
//            this.carteSuivante.ajouteALaSuite(carte);
//        }  {
            this.carteSuivante = carte;
            try {
                this.dernierEmplacement.affecterSuivant(this.carteSuivante.premierEmplacement());
            } catch (NullPointerException e) {
                this.dernierEmplacement.affecterSuivant(null);
            }
    }

    public int nombreCartesSuivantes() {
        try {
                return 1 + this.carteSuivante.nombreCartesSuivantes();
        } catch (NullPointerException e) {
                return 0;
        }
    }

    public void ajouterEmplacement(Emplacement emplacement) {
        try {
                this.dernierEmplacement.affecterSuivant(emplacement);
                this.dernierEmplacement = emplacement;
        } catch (NullPointerException e) {
                this.premierEmplacement = emplacement ;
                this.dernierEmplacement = emplacement ;
        }
    }

    public boolean carteOccupee() {
        Boolean occupe = false;
        int i = 0;
        Emplacement currentEmplacement = premierEmplacement;
        while (i < 3) {
            if (currentEmplacement.estOccupe()) { return true; }
            currentEmplacement = currentEmplacement.suivant();
            i++;
        }

        return occupe;
    }

    public Carte suivant() {
        return carteSuivante;
    }

    public Emplacement recupererPremierEmplacementOccupe() {
        return premierEmplacement.premierEmplacementOccupe();
    }

    public Emplacement premierEmplacement() {
        return premierEmplacement;
    }
}
